package com.io.files;

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.Arrays;

public class Example02 {
    public static void main(String[] args) throws IOException {
        System.out.println("创建目录");
        /**
         * getResource是java.lang.Class的方法，也就是由字节码对象调用。
         * getResource接受一个字符串参数，返回值文件所在的目录。
         * 如果以”/”开头，就在classpath根目录下找（不会递归查找子目录）， 当前文件所在的路径
         * 如果不以”/”开头，就在调用getResource的字节码对象所在目录下找（同样不会递归查找子目录）。 根目录路径
         */
        // /E:/JavaProject/java-learning-directory/out/production/CommonClass/com/io/files/
        //String path = Example02.class.getResource("").getPath();
        //System.out.println(path);
        // /E:/JavaProject/java-learning-directory/out/production/CommonClass/
        String path = Example02.class.getResource("/").getPath();

        String url = "E:\\JavaProject\\java-learning-directory\\CommonClass\\src\\com\\io\\files\\";
        // 创建目录
        File createDir = new File(url+"make_dir");
        boolean existDir = createDir.exists();
        if (existDir) {
            System.out.println("目录已经存在");
        } else {
            // 创建目录
            boolean mkdir = createDir.mkdir();
            System.out.println(mkdir?"创建成功":"创建失败！");
        }

        // 创建多级目录
        File createMoreDir = new File(url+"more1\\more2\\more3\\more4");
        /**
         * isDirectory() 逐层判断目录是否存在
         * 多级目录下，只要一个不存在，都是表示目录不存在
         * 比如：不存在more3和more4，也是返回 false
         */
        boolean directory = createMoreDir.isDirectory();
        if (directory) {
            System.out.println("目录已经存在");
        } else {
            // 创建
            boolean mkdirs = createMoreDir.mkdirs();
            if (mkdirs) {
                System.out.println("目录创建成功!");
            } else {
                System.out.println("目录创建失败！");
            }
        }

        // 创建多个文件
        for (int i = 0; i < 5; i++) {
            File createMoreFile = new File(url+"more1\\more2\\"+i+".txt");
            boolean file = createMoreFile.isFile();
            if (file) {
                System.out.println("文件已经存在！");
            } else {
                // 创建文件
                boolean newFile = createMoreFile.createNewFile();
                if (newFile) {
                    System.out.println("创建成功！");
                } else {
                    System.out.println("创建失败");
                }
            }
        }
        System.out.println("------");
        // 遍历文件和目录
        // 罗列出来目录下面的文件和目录
        File file = new File(url + "more1\\more2");
        // 只有文件名称
        String[] list = file.list();
        System.out.println(Arrays.toString(list));// [0.txt, 1.txt, 2.txt, 3.txt, 4.txt, more3]
        System.out.println("-----");
        File[] files = file.listFiles();
        // 输出绝对路径 java-learning-directory\CommonClass\src
        System.out.println(Arrays.toString(files));// [src\0.txt, 1.txt, 2.txt, 3.txt, 4.txt, more3]
        for (File f : files) {
            // f 返回的绝对路径
            String name = f.getName();
            System.out.println(name);
        }
        // 仅列出 .txt 文件
        System.out.println("---仅罗列出来.txt 文件 ---");
        // (dir, name) -> new FilenameFilter() 替换
        File[] ftxt = file.listFiles((dir, name) -> {
            // 仅列出 .txt 文件
            return name.endsWith(".txt");
        });
        System.out.println(Arrays.toString(ftxt)); // [...com\io\files\more1\more2\0.txt, 1.txt, 2.txt, 3.txt, 4.txt]

        File createMore1 = new File(url+"more1");
        boolean delete = createMore1.delete();
        if (delete) {
            System.out.println("删除成功");
        } else {
            System.out.println("删除失败！");
        }
    }
}
